給定一個 9x9 的數獨板 (2D 數組),請判斷該數獨是否有效。數獨部分空白的格子用 '.' 表示。
數獨驗證需滿足以下三個條件:
解題思路:
為了判斷數獨的有效性,可以利用 HashSet 來存儲每一行、每一列以及每一個 3x3 小方塊中已經出現過的數字。具體步驟如下:
rows:儲存每一行中出現過的數字。cols:儲存每一列中出現過的數字。boxes:儲存每個 3x3 小方塊中出現過的數字。9x9 數獨:'.',則檢查以下三個條件:
rows[row]) 中。cols[col]) 中。3x3 小方塊 (boxes[box_index]) 中。False* 。class Solution:
    def isValidSudoku(board):
        # 用於儲存每行、每列、每個3x3方塊的出現數字
        rows = [set() for _ in range(9)]
        cols = [set() for _ in range(9)]
        boxes = [set() for _ in range(9)]
        # 遍歷整個9x9的數獨板
        for row in range(9):
            for col in range(9):
                num = board[row][col]
                # 如果當前元素為空 ('.'),則跳過
                if num == '.':
                    continue
                # 計算當前元素屬於哪個3x3方塊
                box_index = (row // 3) * 3 + col // 3
                # 檢查該元素是否在當前行、列或方塊中出現過
                if (num in rows[row] or
                    num in cols[col] or
                    num in boxes[box_index]):
                    return False
                # 將當前元素加入對應的行、列、方塊中
                rows[row].add(num)
                cols[col].add(num)
                boxes[box_index].add(num)
        # 如果遍歷完所有元素且無違規情況,返回True
        return True
給定一個未排序的整數數組 nums,找出其中最長的連續元素序列(連續數列)的長度,要求算法的時間複雜度為 O(n)。
建立 HashSet:
將數組中的所有元素加入到 HashSet 中,以去除重複元素並提高查找效率。
遍歷 HashSet:
對每個元素 num 進行檢查,確定它是否為一個連續序列的開頭。
判斷條件:若 num - 1 不在 HashSet 中,則 num 為連續序列的起點。
計算當前序列的長度:
解題思路:
這道題目要求找到最長的連續序列,並且時間複雜度需要達到 O(n)。要達到這個要求,我們可以使用 HashSet 來進行優化。通過 HashSet 的查找效率 O(1),我們能夠快速確認某個元素是否存在,從而避免重複計算。
體解題步驟如下:
num 進行檢查,確定它是否為一個連續序列的開頭。num - 1 不在 HashSet 中,則 num 為連續序列的起點。num 開始,依次檢查 num + 1、num + 2、num + 3... 是否存在於 HashSet 中,直到不再存在為止。def longestConsecutive(nums):
# 使用 HashSet 去除重複元素並便於查找
num_set = set(nums)
longest_streak = 0
class Solution:
    # 遍歷 HashSet 中的每個元素
    for num in num_set:
        # 只從連續序列的起點開始計算長度
        if num - 1 not in num_set:
            current_num = num
            current_streak = 1
            # 繼續計算當前序列的長度
            while current_num + 1 in num_set:
                current_num += 1
                current_streak += 1
            # 更新最大連續序列長度
            longest_streak = max(longest_streak, current_streak)
    
    return longest_streak